
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>SpringAI项目开发智能助手 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>SpringAI项目开发智能助手 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">SpringAI框架的主要设计目标是什么？它如何帮助Java开发者？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">SpringAI旨在简化人工智能技术在企业应用中的集成与使用。它提供了一套标准化的接口，使Java开发者能够轻松接入各种AI服务和模型，而无需深入了解底层AI技术细节。</div>
          </div>
          <div class="card-source">来源: 一、SpringAI快速入门 -> 1. SpringAI是什么？核心优势解析</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">请列举SpringAI框架的至少三项核心优势。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">SpringAI的核心优势包括：与Spring生态无缝集成、统一的API设计以降低学习成本、丰富的模型适配器（支持OpenAI、Azure、百度、阿里等）、内置的提示词管理和向量存储支持，以及企业级的安全与性能保障。</div>
          </div>
          <div class="card-source">来源: 一、SpringAI快速入门 -> 1. SpringAI是什么？核心优势解析</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在SpringAI中，与AI聊天模型进行交互的核心组件是什么？在代码中它通常如何被使用？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">核心组件是 `ChatClient` 接口。它通常通过依赖注入的方式在Service中使用，开发者创建一个 `Prompt` 对象封装输入信息，然后调用 `chatClient.call(prompt)` 方法来获取AI模型的响应。</div>
          </div>
          <div class="card-source">来源: 一、SpringAI快速入门 -> 3. 与Spring Boot的无缝集成方案</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">在电商智能客服案例中，SpringAI是如何结合向量存储（VectorStore）来实现基于知识库问答的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">系统首先使用向量存储（`productKnowledgeBase`）根据用户问题进行相似性搜索，检索出相关的产品信息文档。然后，将这些检索到的信息与用户的原始问题一起构建成一个更丰富的提示词（Prompt），最后调用大模型生成更精准的回答。</div>
          </div>
          <div class="card-source">来源: 二、电商场景AI应用实战 -> 1. 智能客服系统</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">为了提升高并发场景下SpringAI应用的性能，文档中提到了哪种关键策略？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到了缓存策略。通过使用 `CacheManager`，在调用AI服务前先检查缓存中是否存在对应请求的响应。如果缓存命中，则直接返回缓存结果，从而避免对AI服务的重复调用，提升性能。</div>
          </div>
          <div class="card-source">来源: 五、SpringAI性能优化与最佳实践 -> 2. 高并发场景下的缓存策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中介绍的AI服务成本控制与资源优化技巧是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">技巧是根据请求的重要性和预算动态选择合适的模型。对于高重要性任务，使用高质量但成本高的模型（premiumClient）；对于普通任务，则使用成本较低的经济型模型（economyClient）。同时，通过定时任务监控费用，当接近预算上限时发送告警。</div>
          </div>
          <div class="card-source">来源: 五、SpringAI性能优化与最佳实践 -> 4. 成本控制与资源优化技巧</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">安全</div>
          <div class="card-question">在将用户数据发送给AI模型前，为了保护用户隐私，文档中提到了哪两种数据脱敏方法？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">安全</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到了两种方法：1. 对文本字符串使用正则表达式替换敏感信息，如身份证号、手机号、银行卡号等。2. 通过反射机制处理对象，查找并替换被特定注解（如`@SensitiveData`）标记的敏感字段的值。</div>
          </div>
          <div class="card-source">来源: 六、安全与隐私保护 -> 1. 数据脱敏与隐私计算</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">为了确保AI功能使用的合规性与可追溯性，文档中描述了哪两项关键机制？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档描述了权限控制与审计机制。权限控制确保只有授权用户才能使用特定的AI功能。审计机制则记录AI调用的全过程，包括请求者、时间、状态和结果，以便进行事后追溯和生成审计报告，检测异常行为。</div>
          </div>
          <div class="card-source">来源: 六、安全与隐私保护 -> 3. 权限控制与审计机制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在Spring Boot应用中配置SpringAI以使用OpenAI模型时，需要在`application.yml`中设置哪些关键参数？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">需要在`spring.ai.openai`路径下配置三个关键参数：`api-key` (用于身份验证的API密钥)，`base-url` (API服务的地址，如 https://api.openai.com)，以及`model` (指定要使用的具体模型，如 gpt-3.5-turbo)。</div>
          </div>
          <div class="card-source">来源: 一、SpringAI快速入门 -> 2. 环境搭建与依赖配置</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
